﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using GameStepAzure.Models;
using BdModels = GameStepAzure.Areas.Admin.Models;

namespace GameStepAzure.Controllers
{
    public class PerfilController : Controller
    {
        //
        // GET: /Perfil/

        [AllowAnonymous]
        public ActionResult Index()
        {
            return View();
        }

        [AllowAnonymous]
        [HttpPost]
        public ActionResult Index(Cliente cliente)
        {
            // Se valida que no haya usuarios con el mismo nombre
            if (Membership.GetUser(cliente.Nombre) == null)
            {
                // Se crea el usuario 
                Membership.CreateUser(cliente.Nombre, cliente.Password, cliente.Email);

                // Se añade el rol de usuario por default...
                Roles.AddUserToRole(cliente.Nombre, "Usuario");
            }
            else
            {
                ViewBag.error = "Ya existe un usuario con ese nombre";
            }

            return RedirectToAction("LogIn", "Perfil");
        }

        [AllowAnonymous]
        public ActionResult LogIn()
        {
            return View();
        }

        [AllowAnonymous]
        [HttpPost]
        public ActionResult LogIn(Cliente cliente)
        {
            // Se busca el usuario por el email
            string username = Membership.GetUserNameByEmail(cliente.Email);

            // Se valida contraseña y password
            if (Membership.ValidateUser(username, cliente.Password))
            {
                // Se establece la cookie para la sesion del usuario
                FormsAuthentication.SetAuthCookie(username, true);

                // Se valida el tipo del rol del usuario
                if (Roles.IsUserInRole(username, "Usuario"))
                {
                    // Transfiere los productos de la session a la base de datos
                    MembershipUser user = Membership.GetUser(username);
                    string userId = Convert.ToString(user.ProviderUserKey);
                    TransferirProductos(userId);

                    //return RedirectToAction("UsuarioPerfil", "AdministracionCliente", new { area = "Cliente" });
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    return RedirectToAction("Index", "Administracion", new { area = "Admin" });
                }
            }
            else
            {
                ViewBag.error = "El usuario o la contraseña son invalidos";
            }

            return View();
        }

        private void TransferirProductos(string userId)
        {
            object lst = Session["carrito"];
            if (lst != null)
            {
                BdModels.IFachadaCatalogoProductos fac = new BdModels.CatalogoProductos();

                List<ProductoCarrito> prods = (List<ProductoCarrito>)Session["carrito"];
                fac.AgregarProductoCarrito(userId, prods);

                Session["carrito"] = null;
            }
        }

        [Authorize(Roles = "Usuario,Administrador")]
        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Index", "Home");
        }
    }

}

